package com.pay.weixin.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.lang.reflect.Method;

/**
 * Created by wuyi on 2015/12/26.
 */
public class JsonHelper {

    /**
     * 采用阿里巴巴的fastJson包实现Java对象转换为Json文本的功能
     * fastJson包可完美的将Java对象转换成Json文本，可正确处理循环引用问题。
     * 采用反射主要是为了与fastJson包脱耦。
     * @param target
     * @param jsonConvert
     * @return
     */
    public static <T> String toJson(T target, Class jsonConvert){
        try {
            SerializerFeature[] features = {SerializerFeature.WriteNullNumberAsZero,
                    SerializerFeature.WriteNullStringAsEmpty,
                    SerializerFeature.DisableCircularReferenceDetect};
            Method method = jsonConvert.getMethod("toJSONString", Object.class, SerializerFeature[].class);
            return (String)method.invoke(null, new Object[]{target, features});
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 采用阿里巴巴的fastJson包实现Json文本转换为Java对象的功能。
     * fastJson执行效率比Gson高。
     * 采用反射主要是为了与fastJson包脱耦。
     * @param json
     * @param targetClass
     * @param <T>
     * @return
     */
    public static <T> T fromJson(Object json, Class<T> targetClass, Class jsonConvert){
        try {
            Method method = jsonConvert.getMethod("parseObject", String.class, targetClass.getClass());
            return (T)method.invoke(null, json, targetClass);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public static Object fromJson(String json){
        try {
            return JSON.parse(json);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

}
